package com.example.Service;

import io.minio.errors.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.OutputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

public interface ImageService {
    /**
     * 上传用户头像
     *
     * @param file 用户选择的头像文件
     * @param id   用户ID，用于确定头像归属
     * @return 存储后的头像路径或标识
     * @throws IOException 如果文件读写过程中发生错误
     */
    String uploadAvatar(MultipartFile file, int id) throws IOException;

    /**
     * 从MinIO服务器获取图像
     *
     * @param outputStream 输出流，用于接收图像数据
     * @param image        图像名称或路径，用于在MinIO中定位资源
     * @throws IOException               如果文件读写过程中发生错误
     * @throws ServerException           如果MinIO服务器发生错误
     * @throws InsufficientDataException 如果MinIO服务器返回的数据不足
     * @throws ErrorResponseException    如果MinIO服务器返回错误响应
     * @throws NoSuchAlgorithmException  如果算法不存在
     * @throws InvalidKeyException       如果密钥无效
     * @throws InvalidResponseException  如果响应无效
     * @throws XmlParserException        如果XML解析失败
     * @throws InternalException         如果内部发生错误
     */
    void fetchImageFromMinio(OutputStream outputStream, String image) throws Exception;
}
